package com.atguigu.juc.study.chapter09.atomics;

import lombok.Data;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;

/**
 * @author : leimingchao
 * @date Date : 2022年06月15日 22:41
 */
@Data
public class BankAccount {

    private String bankName = "CCB";

    /**
     * 更新的对象属性必须使用public volatile修饰符
     */
    private volatile int money = 0;

    // public synchronized void add() {
    //     money++;
    // }

    /**
     * 因为对象的属性修改类型原子类都是抽象类，所以每次使用都必须使用静态方法newUpdater()创建一个更新器，并且需要设置想要更新的类和属性
     */

    AtomicIntegerFieldUpdater<BankAccount> fieldUpdater = AtomicIntegerFieldUpdater.newUpdater(BankAccount.class, "money");

    public void transMoney(BankAccount bankAccount) {
        fieldUpdater.getAndIncrement(bankAccount);
    }
}
